/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.latesis.dao.hibernate;

import com.latesis.bean.GrupoBean;
import com.latesis.bean.MensajeBean;
import com.latesis.bean.MensajeBean;
import com.latesis.dao.MensajeDAO;
import java.util.List;
import org.hibernate.Query;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

/**
 *
 * @author acabrera
 */
@Transactional(propagation=Propagation.SUPPORTS)
public class MensajeDAOHibernateImpl extends HibernateDaoSupport implements MensajeDAO{
     public MensajeBean guardar(MensajeBean bean) {
         getHibernateTemplate().saveOrUpdate(bean);
         return bean;
    }

    public void borrar(MensajeBean bean) {
        getHibernateTemplate().delete(bean);
    }

    public MensajeBean buscar(MensajeBean bean) {
        
        return getHibernateTemplate().get(MensajeBean.class, bean.getId());
    }

    public List<MensajeBean> buscarTodos() {
        return (List<MensajeBean>)getHibernateTemplate().find("from MensajeBean ");
    }
    
    public List<MensajeBean> buscarNuevos(Long idChofer, Long maximoId) {
        //return (List<MensajeBean>)getHibernateTemplate().find("from MensajeBean m inner join m.choferes as c WITH c.id=? WHERE m.id>?",idChofer,maximoId);        
        //return (List<MensajeBean>)getHibernateTemplate().find("from MensajeBean m where m.id>? and ? in (select c.id from MensajeBean m2 inner join m2.choferes as c WITH c.id=?)",maximoId, idChofer, idChofer);        
        return (List<MensajeBean>)getHibernateTemplate().find("from MensajeBean m where m.id>? and ? in (select c.id from MensajeBean m2 inner join m2.choferes as c )",maximoId, idChofer);        
        //FROM Usuario u inner join u.permisos as p WITH p.estatus = 1                
    }

    public List<MensajeBean> buscarCustom(int start, int end) {
        Query q = getSession().createQuery("from MensajeBean where estado = 'A' ");
        q.setMaxResults(end-start);
        q.setFirstResult(start);
        return (List<MensajeBean>)q.list();
    }

    public int countTotal() {
         Query query = getSession().createQuery("SELECT COUNT(u) FROM MensajeBean u");
        Number result = (Number)query.uniqueResult();
        return result.intValue();
    }
}
